/*******************************************************************************
 * Includes
 ******************************************************************************/
#include "clock_time.h"

/*******************************************************************************
 * Static
 ******************************************************************************/
static struct timeval __g_timevalue;

/*******************************************************************************
 * Code
 ******************************************************************************/
/**
 * \brief 获取时间
 *
 * @param clockid 获取的时间类型
 * @param p_tp    存储时间的时间戳结构体
 *
 * @return 成功返回 0
 */
int clock_gettime(clockid_t clockid, struct timespec *p_tp){
    int      ret  = 0;
    uint32_t tick = 0;

    if (p_tp == NULL) {
        return -WED_EINVAL;
    }

    switch (clockid) {
        case CLOCK_REALTIME:
        case CLOCK_MONOTONIC:
            tick = Wed_tick_get();

            p_tp->tv_sec  = __g_timevalue.tv_sec + tick / WED_TICK_PER_SECOND;
            p_tp->tv_nsec = (__g_timevalue.tv_usec + (tick % WED_TICK_PER_SECOND) * MICROSECOND_PER_TICK) * 1000;
            break;
        default:
            return -WED_EINVAL;
    }

    return ret;
}
